package FileStream;

import org.junit.Test;

import java.io.*;

/**
 * @author: wuhao
 * @since: 2021/4/29 22:06
 */

/**
 *  文件节点流注意点:
 *  1. 定义文件路径时,注意:可以用"/" 或者 "\\";
 *  2. 在写入一个文件时,如果使用构造器FileOutputStream(file),则目录下有同样的文件则被覆盖;
 *     如果使用构造器FileOutputStream(file,true),则目录下的同名文件不会被覆盖,在文件内容末尾追加内容;
 *  3. 在读取文件时,必须保证该文件已存在,否则报异常;
 *  4. 字节流操作字节,比如: .MP3 , .avi , .ppt , .doc
 *  5. 字符流操作字符,比如: .txt , .java ,尤其要注意 doc , excel , ppt 这些不是文本文件!
 */

public class FileReaderTest {

    /**
     * 使用FileReader 字符文件输入流 读取指定文件
     *
     * @param args
     */
    public static void main(String[] args) throws IOException {
        FileReader fileReader = null;
        try {
            //注意:这里的file文件路径,必须真实存在,否则会抛出文件找不到异常;
            fileReader = new FileReader(new File("D:\\test.txt"));
            //创建char型数组,用来存放读取到的字符数据;
            char[] char1 = new char[5];
            int length = 0;
            while ((length = fileReader.read(char1)) != -1) {
                //读取流中的数据存到char数组中;
                System.out.println(new String(char1, 0, length));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
                fileReader.close();
        }
    }

    /**
     * 使用FileInputStream 字节文件输入流 读取指定文件
     */
    @Test
    public void fileInputStreamTest() throws IOException {
        FileInputStream fileInputStream=null;
        try {
           fileInputStream = new FileInputStream(new File("D:\\test.txt"));
            byte[] bytes = new byte[10];
            int length;
            while ((length=fileInputStream.read(bytes))!=-1){
                System.out.println(new String(bytes,0,length));
             }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            fileInputStream.close();
        }
    }
}